// entry-server.js
import { reject } from "lodash";
import { resolve } from "../build/webpack.base.config";
import { createApp } from "./app";

export default async context => {
    // 因为有可能会是异步路由钩子函数或组件，所以我们将返回一个 Promise，
    // 以便服务器能够等待所有的内容在渲染前，
    // 就已经准备就绪。
    const { app, router, store } = createApp();
    // 获取到meta信息
    const meta = app.$meta();
    // 设置服务器端 router 的位置
    router.push(context.url);
    // 获取到当前页面的meta信息，合并全局meta信息
    context.meta = meta;
    // 等到 router 将可能的异步组件和钩子函数解析完
    // new Promise((resolve, reject) => {
    //     router.onReady(resolve, reject)
    // })
    await new Promise(router.onReady.bind(router));

    context.rendered = () => {
        /**
         * Renderer 会把 context.state 数据对象内联到页面模版中
         * 最终发送到客户端的页面中会包含一段脚本： window.__INITIAL_STATE__ = context.state
         * 客户端就需要吧页面中的 window.__INITIAL_STATE__ 拿出来填充到客户端 store 容器中
         */
        context.state = store.state;
    };

    return app;
};
